Deadlock এবং Race Condition এর প্রতিরোধ

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Multithreading এবং Concurrency (মাল্টিথ্রেডিং এবং কনকারেন্সি) |
212
212

Deadlock এবং Race Condition এর প্রতিরোধ

Deadlock এবং Race Condition দুটি গুরুত্বপূর্ণ সমস্যা যা মাল্টিথ্রেডেড প্রোগ্রামিংয়ে ঘটে। এই সমস্যাগুলি সাধারণত পারালাল এক্সিকিউশন এবং শেয়ার্ড রিসোর্স ব্যবহারের সময় ঘটে, এবং এটি সঠিকভাবে হ্যান্ডেল করা না হলে প্রোগ্রাম ক্র্যাশ হতে পারে বা অপ্রত্যাশিত আচরণ ঘটতে পারে। এদের প্রতিরোধের জন্য যথাযথ সিনক্রোনাইজেশন এবং লকারিং মেকানিজম ব্যবহার করা হয়।


১. Deadlock - ডেডলক

Deadlock একটি পরিস্থিতি যেখানে দুটি বা তার বেশি থ্রেড বা প্রসেস একে অপরকে সম্পূর্ণ করতে বাধা দেয় কারণ তারা একে অপরের রিসোর্সের জন্য অপেক্ষা করছে। এক্ষেত্রে, প্রতিটি থ্রেড বা প্রসেস অন্য থ্রেড বা প্রসেসের সম্পূর্ণ করার জন্য অপেক্ষা করে এবং এর ফলে প্রোগ্রামটি স্থির হয়ে যায়।

Deadlock এর ৪টি শর্ত:

  1. Mutual Exclusion: রিসোর্স এক সময়ে শুধুমাত্র একাধিক প্রসেস বা থ্রেডের দ্বারা ব্যবহৃত হতে পারে।
  2. Hold and Wait: একটি প্রসেসের কাছে কমপক্ষে একটি রিসোর্স আছে, এবং আরও রিসোর্সের জন্য অপেক্ষা করছে।
  3. No Preemption: রিসোর্সগুলি কোনও প্রসেস থেকে জোর করে নিয়ে নেওয়া সম্ভব নয়, অর্থাৎ, একবার একটি প্রসেস রিসোর্স পেলে সেটি ছেড়ে দেওয়া না হওয়া পর্যন্ত অন্য প্রসেস রিসোর্সটি ব্যবহার করতে পারবে না।
  4. Circular Wait: একটি প্রসেস একটি রিসোর্সের জন্য অপেক্ষা করছে, এবং সেই রিসোর্সের মালিক অন্য একটি রিসোর্সের জন্য অপেক্ষা করছে, এবং চক্র তৈরি হয়।

Deadlock প্রতিরোধ:

  1. Lock Ordering: রিসোর্সগুলির জন্য একটি নির্দিষ্ট আদেশ তৈরি করুন, এবং প্রতিটি থ্রেড সেই আদেশ অনুসারে রিসোর্স বরাদ্দ করবে। এটি Circular Wait এড়াতে সাহায্য করে।
    • উদাহরণ: রিসোর্স 1 বরাদ্দ করার আগে রিসোর্স 2 বরাদ্দ করা যাবে না।
  2. Deadlock Detection and Recovery: Deadlock সনাক্ত করতে একটি ডেডলক ডিটেকশন অ্যালগরিদম ব্যবহার করুন এবং প্রয়োজনে প্রসেস বা থ্রেড পুনরায় আরম্ভ করতে বা বাতিল করতে পারেন।
  3. Prevention of Circular Wait: একাধিক থ্রেডের মধ্যে রিসোর্সের জন্য অপেক্ষার চক্র এড়ানোর জন্য প্রয়োজনীয় ব্যবস্থা নিন। যেমন, থ্রেডগুলির মধ্যে রিসোর্স বরাদ্দের আগে একটি নির্দিষ্ট ক্রম অনুসরণ করা।
  4. Resource Allocation Graph (RAG): রিসোর্স এবং প্রসেসের জন্য গ্রাফ ব্যবহার করা, যেখানে প্রতিটি রিসোর্স ও প্রসেসের জন্য একটি নোড থাকে এবং তাদের সম্পর্ক চিহ্নিত করা হয়। Deadlock সনাক্ত করা হলে, সিস্টেমটি পুনরায় চালু করা যায়।

২. Race Condition - রেস কন্ডিশন

Race Condition একটি সমস্যা যা ঘটে যখন একাধিক থ্রেড বা প্রসেস একটি শেয়ার্ড রিসোর্সে একসাথে প্রবেশ করে এবং এই অ্যাক্সেসকে সঠিকভাবে নিয়ন্ত্রিত না করা হলে এটি অপ্রত্যাশিত ফলাফল তৈরি করে। এটি সাধারণত তখন ঘটে যখন কোনো প্রসেস বা থ্রেড একটি রিসোর্সে কাজ করছে এবং অন্য একটি থ্রেড বা প্রসেস সেই রিসোর্সে পরিবর্তন আনতে পারে।

Race Condition এর প্রতিরোধ:

  1. Mutex (Mutual Exclusion) Locks: রেস কন্ডিশন প্রতিরোধের জন্য সবচেয়ে সাধারণ উপায় হল mutex বা mutual exclusion লকার ব্যবহার করা। এটি নিশ্চিত করে যে একাধিক থ্রেড একে অপরের সাথে শেয়ার করা রিসোর্সে একযোগভাবে প্রবেশ করতে না পারে।
    • উদাহরণ:

      pthread_mutex_t lock;
      pthread_mutex_init(&lock, NULL);
      pthread_mutex_lock(&lock);  // রিসোর্স অ্যাক্সেসের আগে লক করুন
      // রিসোর্সে কাজ করুন
      pthread_mutex_unlock(&lock);  // কাজ শেষ হলে লক খুলে দিন
  2. Critical Section: একটি অংশ বা ব্লক যেখানে একে অপরের সাথে সম্পর্কিত কোড একসাথে একাধিক থ্রেড বা প্রসেস দ্বারা সম্পন্ন হতে পারে না। এই সেকশনে কেবল একটি থ্রেড বা প্রসেসই কাজ করতে পারে।
    • উদাহরণ:

      // উদাহরণ: Critical Section
      void function() {
          // Mutex লকারের মাধ্যমে একে একে একাধিক থ্রেডের অ্যাক্সেস নিয়ন্ত্রণ করা হচ্ছে
          pthread_mutex_lock(&lock);
          // শেয়ারড রিসোর্সে কাজ
          pthread_mutex_unlock(&lock);
      }
  3. Semaphores: সেমাফোর একটি সিনক্রোনাইজেশন টুল যা থ্রেড বা প্রসেসের মধ্যে সিগন্যাল আদান প্রদান করতে ব্যবহৃত হয়। সেমাফোর ব্যবহার করে একটি রিসোর্সে অ্যাক্সেস নিয়ন্ত্রণ করা যায়। এটি কাউন্টিং বা বাইনারি সেমাফোর হিসাবে কাজ করতে পারে।
    • উদাহরণ:

      sem_t sem;
      sem_init(&sem, 0, 1);  // সেমাফোরের প্রাথমিক মান 1
      
      // একাধিক থ্রেড সেমাফোরের মাধ্যমে একে অপরের সাথে যোগাযোগ করবে
      sem_wait(&sem);  // রিসোর্সে প্রবেশের জন্য সেমাফোর পেতে হবে
      // রিসোর্সে কাজ করুন
      sem_post(&sem);  // কাজ শেষ হলে সেমাফোর মুক্ত করুন
  4. Atomic Operations: Atomic operations রেস কন্ডিশন প্রতিরোধে একটি শক্তিশালী উপায়। এটি নিশ্চিত করে যে একটি রিসোর্সে কাজ করার সময় কোনও অন্য থ্রেড বা প্রসেস এটি পরিবর্তন করতে পারে না, কারণ এটি একমাত্র একটি অ্যাটমিক (অবিচ্ছিন্ন) অপারেশন হবে।
  5. Read/Write Locks: Read/Write locks ব্যবহার করে আপনি সেট করতে পারেন যে একাধিক রিডার একই সময়ে শেয়ার্ড রিসোর্স পড়তে পারে, তবে রাইটার একমাত্র একাই কাজ করতে পারে। এই ধরনের সিঙ্ক্রোনাইজেশন রেস কন্ডিশন প্রতিরোধে সহায়ক।

সারসংক্ষেপ

সমস্যাবর্ণনাপ্রতিরোধের উপায়
Deadlockএকাধিক থ্রেড বা প্রসেস একে অপরকে সম্পূর্ণ করতে বাধা দেয়।Lock Ordering, Deadlock Detection, Resource Allocation Graph
Race Conditionএকাধিক থ্রেড বা প্রসেস শেয়ার করা রিসোর্সে একসাথে প্রবেশ করে।Mutex Locking, Critical Section, Semaphores, Atomic Operations
  • Deadlock এড়াতে resource allocation এবং lock ordering পদ্ধতি ব্যবহার করা হয়, যেখানে থ্রেডগুলি নির্দিষ্ট অর্ডারে রিসোর্স অ্যাক্সেস করতে পারে।
  • Race Condition এড়াতে mutexes, semaphores, এবং atomic operations ব্যবহার করা হয়, যা একসাথে রিসোর্স অ্যাক্সেস নিয়ন্ত্রণ করে।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion